﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using SpiritAlight.SceneManagement;

namespace SpiritAlight.Character
{
    class CharacterManager
    {
        Player player = new Player();

        /// <summary>
        /// 敵リスト。
        /// </summary>
        List<Enemy> enemyList = new List<Enemy>();

        /// <summary>
        /// 召喚した精霊リスト。
        /// </summary>
        List<Spirit> spiritList = new List<Spirit>();

        /// <summary>
        /// このマネージャーが所属するシーン
        /// </summary>
        Scene sceneBelong;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="inScene">このオブジェクトが所属するシーン。</param>
        public CharacterManager(Scene inScene)
        {
            sceneBelong = inScene;
        }

        /// <summary>
        /// マネージャ初期化。ここでそれぞれのキャラクターの初期化を行う。
        /// </summary>
        public void Initialize()
        {
            player.Initialize();
            foreach (var enemy in enemyList)
                enemy.Initialize();
            foreach (var spirit in spiritList)
                spirit.Initialize();
        }

        /// <summary>
        /// マネージャに必要なリソースの読み込み。
        /// </summary>
        /// <param name="Content"></param>
        public void LoadContent(ContentManager Content)
        {
            player.LoadContent(Content);
            foreach (var enemy in enemyList)
                enemy.LoadContent(Content);
            foreach (var spirit in spiritList)
                spirit.LoadContent(Content);
        }


        /// <summary>
        /// マネージャの更新処理。
        /// 各インスタンスの情報を引き渡す。
        /// </summary>
        public void Update()
        {
            player.Update(sceneBelong.SceneManager.InputState);
            foreach (var enemy in enemyList)
                enemy.Update(sceneBelong.SceneManager.InputState);
            foreach (var spirit in spiritList)
                spirit.Update(sceneBelong.SceneManager.InputState);
            
        }

        /// <summary>
        /// 各キャラクターの描画を行う。
        /// </summary>
        /// <param name="spriteBatch"></param>
        public void Draw(SpriteBatch spriteBatch)
        {
            player.Draw(spriteBatch, sceneBelong.SceneColor);
            foreach (var enemy in enemyList)
                enemy.Draw(spriteBatch, sceneBelong.SceneColor);
            foreach (var spirit in spiritList)
                spirit.Draw(spriteBatch, sceneBelong.SceneColor);
        }
    }
}
